package owePaybackLog

import (
	"fmt"
	"github.com/gofiber/fiber/v2"
	"sg-backend/global"
	"sg-backend/model/paylog"
)

type _deleteType struct {
	OweId uint `json:"oweId"`
	Key   uint `json:"key"`
}

func DeleteOwePaybackLog(ctx *fiber.Ctx) error {
	// 解释数据
	// 数据传入为{id:自己, name:自己1}
	var dataDto _deleteType
	if err := ctx.BodyParser(&dataDto); err != nil {
		return ctx.JSON(fiber.Map{
			"status":  "error",
			"message": fmt.Sprintf("数据解释出错！%s", err),
		})
	}

	// 成功提取数据
	// 先获取原来的数据，判断是否有重复
	var updateObj paylog.OweLog
	if err := global.DB.First(&updateObj, dataDto.OweId); err.Error != nil {
		return ctx.JSON(fiber.Map{
			"status":  "error",
			"message": fmt.Sprintf("获取数据库出错！%s", err.Error),
		})
	}

	// 获取要删除的对象
	var delObj paylog.OwePaybackLog
	if err := global.DB.First(&delObj, dataDto.Key); err.Error != nil {
		return ctx.JSON(fiber.Map{
			"status":  "error",
			"message": fmt.Sprintf("获取数据库出错！%s", err.Error),
		})
	}

	// 删除前，更新总的已还
	totalPaybackMoney := updateObj.PaybackMoney - delObj.Money
	updateObj.PaybackMoney = totalPaybackMoney
	if totalPaybackMoney == updateObj.OweMoney {
		updateObj.Done = true
	} else {
		updateObj.Done = false
	}
	r := global.DB.Save(&updateObj)
	if r.Error != nil {
		return ctx.JSON(fiber.Map{
			"status":  "error",
			"message": "更新已还金额到数据库失败！" + r.Error.Error(),
		})
	}

	// 更新完毕，执行删除
	if dr := global.DB.Delete(&delObj); dr.Error != nil {
		return ctx.JSON(fiber.Map{
			"status":  "error",
			"message": "从数据库中删除还款记录失败！" + dr.Error.Error(),
		})
	}

	// 返回
	return ctx.JSON(fiber.Map{
		"status":  "done",
		"message": "删除成功！",
	})
}
